package com.pan.admin.quartz.service;

import com.pan.admin.module.crm.entity.CrmDistributeLoanUser;
import com.pan.admin.quartz.entity.DistributeUser;
import com.pan.admin.quartz.entity.DistributeUserLogic;
import com.pan.admin.quartz.entity.LoanJfExecuteRecord;
import com.pan.admin.quartz.entity.vo.LoanProductVO;

import java.util.List;

/**
 * @Description: 用户分配调度接口
 * @Author: ghb
 * @Date: 2023/11/17 14:25
 */
public interface OrgDistributeService {
    /**
     * 记录表最后一条记录
     *
     * @param productId   机构ID
     * @param firstUserId 第一个客服ID
     * @return
     */
    LoanJfExecuteRecord getDistributeRecord(Integer productId, Integer firstUserId);

    /**
     * 获取全部的机构ID
     */
    List<LoanProductVO> listProductId();

    /**
     * 根据机构ID 获取子公司ID+客服ID
     *
     * @param productId 机构ID
     * @return
     */
    List<DistributeUser> listUserId(Integer productId);

    /**
     * 根据机构ID 获取所属用户ID
     *
     * @param productId
     * @return
     */
    List<Integer> listDistributeLoanUserId(Integer productId);

    /**
     * 批量新增
     *
     * @param userList
     * @return
     */
    void batchInsert(List<CrmDistributeLoanUser> userList);

    /**
     * 执行记录新增
     *
     * @param loanJfExecuteRecord
     */
    int insertDistributeRecord(LoanJfExecuteRecord loanJfExecuteRecord);


    /**
     * 更新执行记录
     *
     * @param loanJfExecuteRecord 甲方机构分配，执行记录
     * @param lastUserId          最后一个用户
     * @param lastLoanUserId      最后一个客服用户
     * @param productId           机构ID
     * @return 结果
     */
    int updateDistributeRecord(LoanJfExecuteRecord loanJfExecuteRecord, Integer lastUserId, Integer lastLoanUserId, Integer productId);


    /**
     * 根据从记录表中获取到的最后一个客服id获取客服对象
     *
     * @param userIdList          用户分配集合
     * @param loanJfExecuteRecord 执行记录
     * @return DistributeUser
     */
    DistributeUser getLastCustomerService(List<DistributeUser> userIdList, LoanJfExecuteRecord loanJfExecuteRecord);

    /**
     * 分配逻辑 将数据组装到 CrmDistributeLoanUser 对象里面 将客服用户分配给客服
     *
     * @param productId  机构ID
     * @param userId     用户ID
     * @param deptId     部门ID
     * @param loanUserId 客服用户ID
     * @return CrmDistributeLoanUser
     */
    CrmDistributeLoanUser getDistributeLogic(Integer productId, Integer userId, Integer deptId, Integer loanUserId);


    /**
     * 顺序分配逻辑
     *
     * @param loanUserIdList      用户集合
     * @param userIdList          客服集合
     * @param nextDistributeUser  最后一个客服
     * @param productId           机构ID
     * @return DistributeUserLogic
     */
    DistributeUserLogic getDistributeSequential(List<Integer> loanUserIdList, List<DistributeUser> userIdList, DistributeUser nextDistributeUser, Integer productId);
}
